查看原文
其他

【10-5】做数据分析,要不要掌握Linux系列:shell编程之集群自动部署!

黄伟呢 数据分析与统计学之美 2023-05-04

1、什么是“集群自动部署”?

2、把需要安装的东西放到http服务器上面去。

# 以安装jdk-8u73-linux-x64.tar.gz为例子,进行说明
# 你需要经历如下几步:
1)虚拟机的httpd服务是否开启。你目前可以一直设置开机自启
[root@image1 ~]# chkconfig --level 35 httpd on
2) 虚拟机的防火墙是否关闭。你目前可以一直设置开机关闭
[root@image1 ~]# chkconfig --level 35 iptables off
3)把jdk-8u73-linux-x64.tar.gz这个安装包,放置到http服务器上面去。
[root@image1 ~]# cp jdk-8u73-linux-x64.tar.gz /var/www/html/
4)检验。你可以去浏览器上打开你自己的http网页,看看是否可以下载。
检验结果如下:这样证明我们是可以下载的。

3、先讲解几个知识点:wget、EOF、expect人机交互

1)wget

wget是一个从网络上自动下载文件的自由工具。它支持HTTP、HTTPS和FTP协议,可以使用HTTP代理。
由于我们在第二步就配置好了我们的http服务。因此,当我们把安装软件放到http服务器的时候,我们就可以使用wget,从我们的http服务器上,自动下载我们想要安装的软件。
1)安装wget
[root@image1 ~]# yum install wget
2)从http服务器上面下载,我们放置的安装软件jdk-8u73-linux-x64.tar.gz
[root@image1 ~]# wget "http://192.168.2.101/jdk-8u73-linux-x64.tar.gz"

2)EOF

# EOF语法如下
-----------------------------
<<EOF        //开始标志
....
在这里写入内容
....
EOF          //结束标志
-----------------------------
执行脚本的时候,需要往一个文件里自动输入多行内容。如果是少数的几行内容,
还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得
愚蠢之极了!这个时候,就可以使用EOF结合cat命令进行行内容的追加了。
Ⅰ EOF配合cat使用:要么追加,要么覆盖原内容。
Ⅱ 使用echo追加内容,少数几行还可以,多了这样写的话太麻烦了。
Ⅲ 使用cat + EOF的方式。

3)expect人机交互

这里你可以去百度学习以下:就不详细演示了。
当我们操作某个命令的时候,有时候提示我们人工输入一些东西,或者“直接回车”,以远程登陆其他虚拟机来说,当我们执行“ssh 192.168.2.102”这个操作的时候,系统会提示你是否想要登陆,然后你就要输入yes;接着就又会让你输入登陆密码password,你又要输入密码。
当然,你肯定不希望,我们使用脚本进行自动部署的时候,还一边要人工操作吧!这个时候,就需要“人机交互”,让系统模拟人工操作。
具体内容,可以百度学习一下,不是太难。

4、进行“集群自动部署”脚本的编写。

1)原理说明

第一个是自动安装的脚本“autoInstall.sh”,在这个shell脚本中,写了一系列的步骤:下载、解压、配置环境变量、重新加载配置文件、测试是否安装成功、删除安装包等。我们只需要将这个脚本发送到不同节点的机器上,执行即可。这就是下面要说的第二个shell脚本,远程发送的脚本。
第二个脚本是远程发送文件,执行文件的脚本“send.sh”,在这个shell脚本中,使用scp远程发送的功能,使用了ssh远程登陆并执行“autoInstall.sh”的功能。但是这一切都依赖于【免密登录】,这就是下面要写的第三个shell脚本。
第三个脚本是免密登录的脚本“key.sh”,在这个shell脚本中,实现了生成密钥对、发送公钥到其他机器的授权池等一系列的人机交互。

2)自动安装的脚本:autoInstall.sh

#!/bin/bash

# 1)下载
wget "http://192.168.2.101/jdk-8u73-linux-x64.tar.gz"
# 2)创建目录并解压解压
mkdir -p /usr/local/java
tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local/java
# 3)配置:利用she'l'l脚本,往配置文件中追加内容
cat>>/etc/profile<<EOF
export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
# 4)重新加载
source /etc/profile
# 5)测试
java -version
# 6)删除安装包
rm -rf /root/jdk-8u73-linux-x64.tar.gz
# 7)测试程序是否执行到了最后一行
echo "我已经执行到最后一行了"

3)发送autoInstall.sh安装脚本到image2和image3这两台机器的脚本:send.sh

发送安装脚本的前提是:配置免密登录。只有在配置免密登录的前提下,才可以实现不用输入密码,进行远程登陆 和 远程发送文件。
#!/bin/bash

services=(192.168.2.102 192.168.2.103)
# yum install -y expect
for service in ${services[*]}
do
    scp -r autoInstall.sh  root@$service:/root
    ssh $service sh autoInstall.sh
    # 人机交互
    expect -c "
       expect {
           \"~]#\" {send \"exit\r\";exp_continue;}
       }
   "
   echo "${service} 退出登录"
done

4)免密登录的脚本:key.sh

#!/bin/bash

expect -c "
   spawn echo "我要开始生成密钥对了"
   spawn ssh-keygen
   expect {
       \"/root/.ssh/id_rsa):\" {send \"\r\";exp_continue;}
       \"(empty for no passphrase):\" {send \"\r\";exp_continue;}
       \"passphrase again:\" {send \"\r\";exp_continue;}
   }
"
services=(192.168.2.101 192.168.2.102 192.168.2.103)
for service in ${services[*]}
do
    # 人机交互
    expect -c "
       spawn ssh-copy-id $service
       expect {
           \"yes/no)?\" {send \"yes\r\";exp_continue;}
           \"password:\" {send \"123456\r\";exp_continue;}
       }
   "
done

----------End----------

为了公平起见,黄同学选择在朋友圈赠书,同时已经送了好多本书籍了。好处:这样一来,大家中奖概率也大,都会有机会的,很多都是刚刚加了我的好友,都中奖了!
方式一:复制我微信号aili1127421544,添加我微信;
方式二:长按扫描下方二维码,添加我微信;
备注:黄同学朋友圈福利多多,欢迎查阅!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存